package com.aek.ebey.sys.service;

import java.util.List;

import com.aek.common.core.Result;
import com.aek.common.core.base.BaseService;
import com.aek.ebey.sys.model.SysDept;
import com.aek.ebey.sys.model.SysTenant;
import com.aek.ebey.sys.model.SysUser;
import com.aek.ebey.sys.model.query.UserQuery;
import com.baomidou.mybatisplus.plugins.Page;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author aek
 * @since 2017-05-06
 */
public interface SysUserService extends BaseService<SysUser> {

	/**
	 * 初始化机构管理员
	 * 
	 * @param tenant
	 * @param admin
	 * @return
	 */
	SysUser initTenantAdminUser(SysTenant tenanta, SysUser admin);

	/**
	 * 根据用户名查询用户
	 * 
	 * @param account
	 * @return
	 */
	SysUser findByAccount(String account);

	/**
	 * 创建机构管理员
	 * 
	 * @param admin
	 *            管理员信息
	 */
	void createTenantAdmin(SysUser admin);

	/**
	 * 根据手机号码查询用户信息
	 * 
	 * @param mobile
	 *            手机号码
	 * @return
	 */
	SysUser findByMobile(String mobile);

	/**
	 * 根据邮箱查找用户
	 * 
	 * @param Email
	 * @return
	 */
	SysUser findByEmail(String Email);

	/**
	 * 判断用户密码
	 * 
	 * @param user
	 *            用户
	 * @param inPwd
	 *            输入的密码
	 * @return 成功 or 失败
	 */
	boolean checkPassword(SysUser user, String inPwd);

	/**
	 * 修改用户密码
	 * 
	 * @param userId
	 *            用户id
	 * @param password
	 *            新密码
	 * @return
	 */
	boolean changePassword(Long userId, String password);

	/**
	 * 添加用户
	 * 
	 * @param user
	 *            用户信息
	 */
	void add(SysUser user);

	/**
	 * 修改用户信息
	 * 
	 * @param user
	 */
	void edit(SysUser user);

	/**
	 * 根据关键字检索
	 * 
	 * @param deptIds
	 *            部门ID集合
	 * @param user
	 *            具体检索
	 * @param keyword
	 *            模糊匹配
	 * @return
	 */
	Page<SysUser> search(UserQuery query);

	/**
	 * 根据部门更新用户信息
	 * 
	 * @param dept
	 */
	void updateByDeptId(SysDept dept);

	/**
	 * 密码加密
	 * 
	 * @param password
	 * @return
	 */
	String encrypt(String password);

	/**
	 * 查询租户下的用户
	 * 
	 * @param tenantId
	 * @param enable
	 * @return
	 */
	List<SysUser> findByTenantId(Long tenantId, Boolean enable);

	/**
	 * 根据部门id查询用户
	 */
	List<SysUser> findByDeptId(Long deptId);

	List<SysUser> findByIds(String ids);

}
